// 标签系统相关的actions
export default {
  // 获取所有标签
  async fetchTags({ commit, dispatch }) {
    try {
      commit('SET_LOADING', true)
      dispatch('setLoading', true)
      
      // 调用API获取所有标签
      const response = await this.app.$api.tags.getTags()
      
      // 设置标签列表
      commit('SET_TAGS', response.data || [])
    } catch (error) {
      console.error('Failed to fetch tags:', error)
      commit('SET_ERROR', error.message)
      this.app.$message.error('获取标签列表失败')
    } finally {
      commit('SET_LOADING', false)
      dispatch('setLoading', false)
    }
  },
  
  // 获取指定包的标签
  async fetchPackageTags({ commit, dispatch }, packageName) {
    try {
      commit('SET_LOADING', true)
      dispatch('setLoading', true)
      
      // 调用API获取指定包的标签
      const response = await this.app.$api.tags.getPackageTags(packageName)
      
      // 设置包的标签
      commit('SET_PACKAGE_TAGS', {
        packageName,
        tags: response.data || []
      })
    } catch (error) {
      console.error('Failed to fetch package tags:', error)
      commit('SET_ERROR', error.message)
      this.app.$message.error('获取包标签失败')
    } finally {
      commit('SET_LOADING', false)
      dispatch('setLoading', false)
    }
  },
  
  // 添加新标签
  async addTag({ commit, dispatch }, tagData) {
    try {
      commit('SET_SAVING', true)
      dispatch('setLoading', true)
      
      // 调用API添加新标签
      const response = await this.app.$api.tags.addTag(tagData)
      
      // 添加成功提示
      this.app.$message.success('标签添加成功')
      
      // 添加新标签到标签列表
      if (response.data) {
        commit('ADD_TAG', response.data)
      }
    } catch (error) {
      console.error('Failed to add tag:', error)
      commit('SET_ERROR', error.message)
      this.app.$message.error('标签添加失败')
    } finally {
      commit('SET_SAVING', false)
      dispatch('setLoading', false)
    }
  },
  
  // 更新标签
  async updateTag({ commit, dispatch }, { id, tagData }) {
    try {
      commit('SET_SAVING', true)
      dispatch('setLoading', true)
      
      // 调用API更新标签
      const response = await this.app.$api.tags.updateTag(id, tagData)
      
      // 更新成功提示
      this.app.$message.success('标签更新成功')
      
      // 更新标签列表
      if (response.data) {
        commit('UPDATE_TAG', response.data)
      }
    } catch (error) {
      console.error('Failed to update tag:', error)
      commit('SET_ERROR', error.message)
      this.app.$message.error('标签更新失败')
    } finally {
      commit('SET_SAVING', false)
      dispatch('setLoading', false)
    }
  },
  
  // 删除标签
  async deleteTag({ commit, dispatch }, tagId) {
    try {
      commit('SET_DELETING', true)
      dispatch('setLoading', true)
      
      // 调用API删除标签
      await this.app.$api.tags.deleteTag(tagId)
      
      // 删除成功提示
      this.app.$message.success('标签删除成功')
      
      // 从标签列表中删除
      commit('DELETE_TAG', tagId)
    } catch (error) {
      console.error('Failed to delete tag:', error)
      commit('SET_ERROR', error.message)
      this.app.$message.error('标签删除失败')
    } finally {
      commit('SET_DELETING', false)
      dispatch('setLoading', false)
    }
  },
  
  // 为包添加标签
  async addPackageTag({ commit, state, dispatch }, tagId) {
    try {
      commit('SET_SAVING', true)
      dispatch('setLoading', true)
      
      if (!state.currentPackageName) {
        throw new Error('未指定包名称')
      }
      
      // 调用API为包添加标签
      const response = await this.app.$api.tags.addPackageTag(state.currentPackageName, tagId)
      
      // 添加成功提示
      this.app.$message.success('标签添加成功')
      
      // 更新包标签列表
      if (response.data) {
        commit('ADD_PACKAGE_TAG', response.data)
      }
    } catch (error) {
      console.error('Failed to add package tag:', error)
      commit('SET_ERROR', error.message)
      this.app.$message.error('添加包标签失败')
    } finally {
      commit('SET_SAVING', false)
      dispatch('setLoading', false)
    }
  },
  
  // 从包中移除标签
  async removePackageTag({ commit, state, dispatch }, tagId) {
    try {
      commit('SET_DELETING', true)
      dispatch('setLoading', true)
      
      if (!state.currentPackageName) {
        throw new Error('未指定包名称')
      }
      
      // 调用API从包中移除标签
      await this.app.$api.tags.removePackageTag(state.currentPackageName, tagId)
      
      // 移除成功提示
      this.app.$message.success('标签移除成功')
      
      // 从包标签列表中移除
      commit('REMOVE_PACKAGE_TAG', tagId)
    } catch (error) {
      console.error('Failed to remove package tag:', error)
      commit('SET_ERROR', error.message)
      this.app.$message.error('移除包标签失败')
    } finally {
      commit('SET_DELETING', false)
      dispatch('setLoading', false)
    }
  },
  
  // 清空包标签
  clearPackageTags({ commit }) {
    commit('CLEAR_PACKAGE_TAGS')
  },
  
  // 清空所有标签
  clearAllTags({ commit }) {
    commit('CLEAR_ALL_TAGS')
  }
}